/*
 * SimuladorLiga.java
 *
 * Created on 1 de abril de 2007, 15:27
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package futbol.simulaciones;

import futbol.Partido;
import futbol.tacticas.concursantes.Tactica;
import futbol.tacticas.concursantes.Concursantes;
import futbol.tacticas.concursantes2007.AlfArgentin.TacticaAlf;
import futbol.tacticas.concursantes2007.Alvaro_Win.TacticaAlvaro;
import futbol.tacticas.concursantes2007.AmingosUnidos.TacticaAmingos;
import futbol.tacticas.concursantes2007.AthleticSomardas.Somardas;
import futbol.tacticas.concursantes2007.BigOrcClub.TacticaBigOrc;
import futbol.tacticas.concursantes2007.ByteriderFC.TacticaByterider;
import futbol.tacticas.concursantes2007.CARLINHOS.TacticaPrimera;
import futbol.tacticas.concursantes2007.CARONTE.TacticaDiego;
import futbol.tacticas.concursantes2007.CapitanesEOSA.TacticaMGL;
import futbol.tacticas.concursantes2007.CapitanesEOSB.TacticaDlogo;
import futbol.tacticas.concursantes2007.CerverosFC.TacticaCerveros;
import futbol.tacticas.concursantes2007.Chuky.TacticaChuky;
import futbol.tacticas.concursantes2007.Corinthians.Corinthians;
import futbol.tacticas.concursantes2007.DaniCampeon.Dani_Campeon;
import futbol.tacticas.concursantes2007.Eclipse.TacticaRouces;
import futbol.tacticas.concursantes2007.FCAlexB.TacticaAlex2;
import futbol.tacticas.concursantes2007.FCThePatetics.TacticaPatetica;
import futbol.tacticas.concursantes2007.GermoCanalla.TacticaGermo;
import futbol.tacticas.concursantes2007.GoldenLions.TacticaGoldenLions;
import futbol.tacticas.concursantes2007.JFBRUNO.TacticaJFBruno;
import futbol.tacticas.concursantes2007.JReymosClub.TacticaMario;
import futbol.tacticas.concursantes2007.JavaTito.TacticaJavaTito;
import futbol.tacticas.concursantes2007.JavierGon.TacticaJavierGon;
import futbol.tacticas.concursantes2007.KalimeroFC.TacticaKalimero;
import futbol.tacticas.concursantes2007.LegionXEquestris.TacticaHimura;
import futbol.tacticas.concursantes2007.Leito.TacticaLeito;
import futbol.tacticas.concursantes2007.Loquehay.TacticaHumberto;
import futbol.tacticas.concursantes2007.LosLeonesAFAM.TacticaAFAM;
import futbol.tacticas.concursantes2007.Mayin1010.Mayin;
import futbol.tacticas.concursantes2007.Minisoft.linux;
import futbol.tacticas.concursantes2007.MucaFogonieri.TacticaRaul;
import futbol.tacticas.concursantes2007.NadaEsImposible.TacticaYerlie;
import futbol.tacticas.concursantes2007.PaneteTeam.TacticaBernabe;
import futbol.tacticas.concursantes2007.QBits.TacticaJavier;
import futbol.tacticas.concursantes2007.R_NAJERA.TacticaFCRN;
import futbol.tacticas.concursantes2007.SerieC.TacticaB;
import futbol.tacticas.concursantes2007.SeteTeam.TacticaFacklab;
import futbol.tacticas.concursantes2007.TacticaPeRRaKo.TacticaPeRRaKo;
import futbol.tacticas.concursantes2007.TacticaTururu.TacticaTururu;
import futbol.tacticas.concursantes2007.Venbea1FC.TacticaVenbea;
import futbol.tacticas.concursantes2007.atiq.TacticaKevinAtiq;
import futbol.tacticas.concursantes2007.cdvergui.TacticaVergui;
import futbol.tacticas.concursantes2007.independientejfc.IndependienteJFC;
import futbol.tacticas.concursantes2007.jatiq.HgsATIQ_Tactica;
import futbol.tacticas.concursantes2007.kapsi.TacticaKapsi;
import futbol.tacticas.concursantes2007.losdecordobalametendobla.TacticaPaco4;
import futbol.tacticas.concursantes2007.tikitaka.TikiTaka;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Date;
import java.util.Properties;
import java.util.Vector;

/**
 *
 * @author Jorge
 */
public class SimuladorLiga {

    private int nRepetirLiga=1;
    
    public static String rutaFichero="LigaPrevia.prop";
    
    private Tactica tacticasAceptadas[]=Concursantes.getTodasLasTacticas();  //Obtiene todas las tcticas
    private int nResultado[][]=new int[tacticasAceptadas.length][7];

    public static void retardo(int ml){
        try{Thread.sleep(ml);}catch(Exception e){}
    }
    
    public static Vector<Integer> devolverIndicesOrdenadosPor(){
        Properties p=cargarFichero();
        Vector<String> vector=new Vector<String>();
        
        return null;
    }
    
    private static Properties cargarFichero(){
        try{
            String sFichero = rutaFichero;
            File file=new File(sFichero);
            if (file.exists()){
                Properties ligaPrevia=new Properties();
                FileInputStream fis=new FileInputStream(file);
                ligaPrevia.load(fis);
                fis.close();
                return ligaPrevia;
            }else{
                return new Properties();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }
    
    private static void guardarFichero(Properties liga){
        try{
            String sFichero = "LigaPrevia.prop";
            File file=new File(sFichero);
            FileOutputStream fos=new FileOutputStream(file);
            liga.store(fos, "Liga previa");
            fos.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    private void simular(){
        
        Tactica soloEsta=null;
        
        long nTiempos[]=new long[tacticasAceptadas.length];
        Date fecha;
        long nValorAntes, nValorDespues;
        long nTiempo;
        long nContarVictoriasN=0;
        for (int i=0;i<nRepetirLiga;i++){
            System.out.print("Repeticin:" + i + ",");
            for (int n=0;n<tacticasAceptadas.length;n++){
                soloEsta=tacticasAceptadas[n];
                nContarVictoriasN=0;
                Properties proTac=cargarFichero();
                if (!proTac.containsKey(soloEsta.getNombre()))
                  if (soloEsta==null || soloEsta.getClass().equals(tacticasAceptadas[n].getClass())){
                    
                    for (int m=0;m<tacticasAceptadas.length ;m++){
                        tacticasAceptadas=Concursantes.getTodasLasTacticas();  //Vuelve a generar todas las tcticas. Poco eficiente en un futuro revisar instanciar las dos que queremos que jueguen.
                        if (n!=m){
                            nValorAntes=(new Date()).getTime();
                            Partido p=new Partido(tacticasAceptadas[n], tacticasAceptadas[m]);
                            Date d1=new Date();
                            for (int z=0;z<1800;z++){
                                p.mover();
                            }
                            Date d2=new Date();
                            if (p.getGanador()==0) {
                                nResultado[n][0]++;
                                nContarVictoriasN++;
                            }
                            if (p.getGanador()==1) nResultado[m][0]++;
                            nResultado[n][1]+=p.getPuntos(0);
                            nResultado[m][1]+=p.getPuntos(1);
                            nResultado[n][2]+=p.getPuntos(1);
                            nResultado[m][2]+=p.getPuntos(0);
                            nValorDespues=(new Date()).getTime();
                            nTiempo=nValorDespues-nValorAntes;
                            nTiempos[n]+=nTiempo;
                            nTiempos[m]+=nTiempo;
                            System.gc();  //Realiza la recoleccin de basura
                            System.out.println(tacticasAceptadas[n].getNombre() + " " + p.getPuntos(0) + " - " +
                                        tacticasAceptadas[m].getNombre() + " " + p.getPuntos(1) + "  " +
                                        (d2.getTime()-d1.getTime()));
                            retardo(10);
                        }
                    }
                    proTac.put(soloEsta.getNombre(), nContarVictoriasN + " " + (tacticasAceptadas.length-1));
                    guardarFichero(proTac);
                    System.out.println("*****************************************************");
                    System.out.println("* Numero de victorias " + soloEsta.getNombre() + ":" + nContarVictoriasN);
                    System.out.println("*****************************************************");
                }
                
            }
        }
        //if (soloEsta!=null)
        //    System.out.println("Victorias:" + nContarVictoriasN);
        //System.out.println();
        //for (int n=0;n<nResultado.length;n++){
//            System.out.println(
  //                  nResultado[n][0] + " " +
    //                nResultado[n][1] + " " +
      //              nResultado[n][2] + " " + 
//                    nTiempos[n]/nTiempos.length + " " + 
  //                  tacticasAceptadas[n].getNombre());
    //    }
        
    }
    
    public static void main(String arg[]){
        SimuladorLiga sl=new SimuladorLiga();
        sl.simular();
    }
    
}
